/**
 * 
 * merge level=61
 * 
 * 系统用的参数与函数
 */
Ext.define('Jfok.system.Modules', {

	// 所有的模块的字义的数组
	modulesinfo : null,
	roles : null,

	SEPARATOR : '___',

	modules : new Ext.util.MixedCollection(),

	constructor : function(v) {
		var me = this;
		me.modulesinfo = v.tf_Modules;
		me.roles = v.tf_userRoleDetails;
		// 所有隐藏字段角色中隐藏的字段
		me.fieldhiddenroles = v.tf_userFieldHiddenRoleDetails;
		me.fieldreadonlyroles = v.tf_userFieldReadonlyRoleDetails;

		Ext.each(me.modulesinfo, function(module) {
					// module.iconURL = me.urlExists(module.iconURL);
					Ext.each(me.roles, function(role) {
								if (role.tf_moduleId == module.tf_moduleId) {
									module.tf_userRole = role;
									return false;
								}
							})
				})
		// 在field字段 addition tf_otherSetting中，如果有 field : { key :
		// value},的全部加入到field中
		Ext.each(me.modulesinfo, function(module) {
					Ext.each(module.moduleFields, function(field) {
								if (field.tf_otherSetting) {
									var otherSetting = Ext.decode('{' + field.tf_otherSetting
													+ '}', true);
									if (otherSetting && otherSetting.field)
										Ext.apply(field, otherSetting.field);
								}
								// 判断是否此字段不可以被这个用户显示
								Ext.each(me.fieldhiddenroles, function(fieldrole) {
											if (fieldrole.tf_fieldId == field.tf_fieldId)
												field.tf_isHidden = true;
										})
								// 判断是否此字段不可以被这个用户修改
								Ext.each(me.fieldreadonlyroles, function(fieldrole) {
											if (fieldrole.tf_fieldId == field.tf_fieldId) {
												field.tf_allowEdit = false;
												field.tf_allowNew = false;
											}
										})
							});
					Ext.each(module.moduleFormSchemes, function(scheme) {
								if (scheme.tf_otherSetting) {
									var otherSetting = Ext.decode('{' + scheme.tf_otherSetting
													+ '}', true);
									Ext.apply(scheme, otherSetting);
								}
								Ext.each(scheme.moduleFormSchemeGroups, function(group) {
											if (group.tf_otherSetting) {
												var otherSetting = Ext.decode('{'
																+ group.tf_otherSetting + '}', true);
												Ext.apply(group, otherSetting);
											}
											Ext.each(group.moduleFormSchemeGroupFields, function(
															field) {
														if (field.tf_otherSetting) {
															var otherSetting = Ext.decode('{'
																			+ field.tf_otherSetting + '}', true);
															Ext.apply(field, otherSetting);
														}
													})
										})
							})
				});

		// 如果可以审批，那么加入审批状态的一级导航 ，只有可以审批的人员才有
		Ext.each(me.modulesinfo, function(module) {
					if (module.tf_userRole && module.tf_userRole.tf_allowApprove > 0
							&& module.tf_userRole.tf_approveOrder > 0) {
						module.moduleGridNavigates.push({
									tf_cascading : false,
									tf_enabled : true,
									tf_fields : 'approvetype',
									tf_text : '审批类型',
									tf_type : null
								})
					}
				})
	},

	showModuleRecord : function(moduleName, id) {
		this.getModule(moduleName).showRecord(id);
	},

	// 取得一个module的控制模块
	getModule : function(moduleName) {
		var result = this.modules.get(moduleName);
		if (!result) {
			var m = this.getModuleInfoWithName(moduleName);
			if (!m) {
				// console.log('没找到模块:' + moduleName + "的字义！");
				return null;
			}
			result = Ext.create('Jfok.system.Module', m);
		}
		this.modules.add(moduleName, result);
		// console.log('取得模块:' + moduleName + '的modulepanel');
		return result;
	},

	// 刷新某个模块的数据，如果该模块存在于页面上
	refreshModuleGrid : function(moduleNames) {
		if (moduleNames) {
			var ms = moduleNames.split(','), me = this;
			Ext.each(ms, function(moduleName) {
				console.log(moduleName + "---- grid refresh")
				
				var result = me.modules.get(moduleName);
				if (result) {
					if (result.modulePanel)
						result.modulePanel.down('modulegrid').refreshWithSilent();
					if (result.modulePanelWithParent)
						result.modulePanelWithParent.down('modulegrid').refreshWithSilent();
					if (result.modulePanelWithFilter)
						result.modulePanelWithFilter.down('modulegrid').refreshWithSilent();
					if (result.newModulePanelWithParent && result.newModulePanelWithParent.down('modulegrid'))
						result.newModulePanelWithParent.down('modulegrid').refreshWithSilent();
				}
			})
		}
	},

	/**
	 * 根据id号取得module的定义
	 */
	getModuleInfoWithId : function(moduleId) {
		for (var i in this.modulesinfo) {
			var module = this.modulesinfo[i];
			if (module.tf_moduleId == moduleId)
				return module;
		}
		return null;
	},
	/**
	 * 根据模块名称号取得module的定义
	 */
	getModuleInfoWithName : function(moduleName) {
		// console.log("取得moduleInfo:" + moduleName);
		for (var i in this.modulesinfo) {
			var module = this.modulesinfo[i];
			if (module.tf_moduleName == moduleName)
				return module;
		}
		return null;
	},

	/**
	 * 根据asName号取得module的定义
	 */
	getModuleInfoWithAsName : function(asName) {
		for (var i in this.modulesinfo) {
			var module = this.modulesinfo[i];
			if (module.tableAsName == asName)
				return module;
		}
		return null;
	},

	/**
	 * 根据模块Id号取得module的权限
	 */
	getUserRoleWithId : function(moduleId) {
		for (var i in this.roles) {
			var userrole = this.roles[i];
			if (userrole.tf_moduleId == moduleId)
				return userrole;
		}
		return null;
	},

	urlExists : function(url) {
		var xmlhttp = new XMLHttpRequest(); // new
		// ActiveXObject('Microsoft.XMLHTTP');
		try {
			xmlhttp.open('GET', url, false);
			xmlhttp.send(null);
			// console.log(xmlhttp);
			if (xmlhttp.readyState == 4) {
				return xmlhttp.status == 200 ? url : null;
			}
		} catch (e) {
			return null;
		}
	}

});
